package com.ssh;

import org.junit.Test;

public class IsMatch_10 {
	public boolean isMatch(String s, String p) {
		if (p.isEmpty()) return s.isEmpty();
        if (p.length() > 1 && p.charAt(1) == '*')
            return isMatch(s, p.substring(2)) || 
            		((!s.isEmpty() && (p.charAt(0) == '.' || s.charAt(0) == p.charAt(0))) && isMatch(s.substring(1), p));
        if (p.charAt(0) == '.')
            return !s.isEmpty() && isMatch(s.substring(1), p.substring(1));
        return !s.isEmpty() && s.charAt(0) == p.charAt(0) && isMatch(s.substring(1), p.substring(1));
    }
	
	public boolean isMatch1 (String s, String p) {
		if (p.isEmpty()) {
			return s.isEmpty();
		}
		if (p.length() > 1 && p.charAt(1) == '*') {
			//例如p=a*，s中可以有0个或多个a(本来就是0个a，或者由后面的&&之后的截没了)，所以第一个||之前判断a为0个时，||后判断a至少为一个时，&&后将s（0），截去，进行下一轮递归
			return isMatch1(s, p.substring(2)) || (!s.isEmpty() && (p.charAt(0) == '.' || p.charAt(0) == s.charAt(0))) && isMatch1(s.substring(1), p);
		}
		if (p.charAt(0) == '.') {
			return !s.isEmpty() && isMatch1(s.substring(1), p.substring(1));
		}
		return !s.isEmpty() && s.charAt(0) == p.charAt(0) && isMatch1(s.substring(1), p.substring(1));
	}
	
	
	@Test
	public void test () {
		String s = "aa";
		/*System.out.println(s.substring(0));
		
		System.out.println(true || false && true);*/
		
		System.out.println(isMatch("aa","*"));
	}
}
